package cn.bdqn.controller.sys;

import cn.bdqn.entity.ClassInfo;
import cn.bdqn.service.sys.SysClassInfoService;
import cn.bdqn.utils.MyLog;
import cn.bdqn.utils.UploadFile;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * @ProjectName: ycbdqn
 * @Package: cn.bdqn.controller.sys
 * @Author: huat
 * @Date: 2020/3/19 8:58
 * @Version: 1.0
 */
@Controller
@RequestMapping("/sys/classInfo")
public class SysClassInfoController {
    @Autowired
    SysClassInfoService sysClassInfoService;
    @Value("${route_name}")
    private String routeName;//获取图片前面路径
    /**
     * 进入课程页面
     * @return
     */
    @RequestMapping("intoClassInfo")
    public String intoClassInfo(){
        return "class/classInfo";
    }
    /**
     * 获取课程信息
     * @param page 起始页
     * @param limit 页面大小
     * @param className 课程名称
     * @return
     */
    @RequestMapping("getClassInfo")
    @ResponseBody
    @MyLog("获取课程信息")
    public Map<String,Object> getClassInfo(int page,int limit,String className){
        return sysClassInfoService.getClassInfo(page, limit, className);
    }

    /**
     * 进入添加课程页面
     * @return
     */
    @RequestMapping("intoAddclassInfo")
    public String intoAddclassInfo(){
        return "class/addClassInfo";
    }

    /**
     * 添加课程
     * @param classInfo  课程对象
     * @param bindingResult 错误结果
     * @param mr    文件上传流
     * @return
     */
    @RequestMapping("addClassInfo")
    @ResponseBody
    @MyLog("添加课程")
    public String addClassInfo(@Valid ClassInfo classInfo, BindingResult bindingResult, MultipartHttpServletRequest mr){
        List<ObjectError> error=null;
        //返回boolean 是为了验证@Validated后面bean 里是否有不符合注解条件的错误信息
        if(bindingResult.hasErrors()){
            //获得所有错误信息返回list集合
            error=bindingResult.getAllErrors();
            for (ObjectError o:error) {
                //获得不符合要求的message
                return JSON.toJSONString(o.getDefaultMessage());
            }

        }
        if(null!=mr.getMultiFileMap().get("imageUrl")){
            String fileName=mr.getFileMap().get("imageUrl").getOriginalFilename();
            String fileNameIsJPG=fileName.substring(fileName.lastIndexOf(".")+1);
            if(!"jpg".equalsIgnoreCase(fileNameIsJPG)){
                return "2";
            }
            String result= UploadFile.getFileURL(mr,"imageUrl");

            classInfo.setClassUrl(routeName+"/image/"+result);
            return sysClassInfoService.addClassInfo(classInfo);
        }else{
            return "2";
        }
    }

    /**
     * 进入修改界面
     * @param id 课程id
     * @param model
     * @return
     */
    @RequestMapping("intoUpdateclassInfo")
    public String intoUpdateclassInfo(int id, Model model){
        model.addAttribute("classInfo",sysClassInfoService.getClassInfoById(id));
        return "class/updateClassInfo";
    }

    /**
     * 修改课程信息
     * @param classInfo 课程对象
     * @param mr
     * @return
     */
    @RequestMapping("updateClassInfo")
    @ResponseBody
    @MyLog("修改课程信息")
    public String updateClassInfo(ClassInfo classInfo,MultipartHttpServletRequest mr){
        if(null!=mr.getMultiFileMap().get("imageUrl")) {
            String fileName = mr.getFileMap().get("imageUrl").getOriginalFilename();
            String fileNameIsJPG = fileName.substring(fileName.lastIndexOf(".") + 1);
            if (!"jpg".equalsIgnoreCase(fileNameIsJPG)) {
                return "2";
            }
            String result = UploadFile.getFileURL(mr, "imageUrl");
            classInfo.setClassUrl(routeName+"/image/"+result);
        }

            return sysClassInfoService.updateClassInfo(classInfo)+"";
    }

    /**
     * 根据id删除课程
     * @param id 课程id
     * @return
     */
    @RequestMapping("deleteClassInfo")
    @ResponseBody
    @MyLog("删除课程信息")
    public boolean deleteClassInfo(int id){
        return sysClassInfoService.deleteClassInfo(id);
    }
}
